import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class groupAnagrams {
    /**
     * 字母亦为此分组
     * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
     * 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
     *
     * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
     * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
     */
    public List<List<String>> method(String[] strs){
        // 首先是分组，采取相同的key进行分组
        HashMap<String,List<String>> hash =new HashMap<>();
        for(int i=0;i<strs.length;i++){
            char[] s=strs[i].toCharArray();
            Arrays.sort(s); //规定范式，从小到大排列
            String key =String.valueOf(s); //包含范式的key,新字符串

            if(hash.containsKey(key)){
                hash.get(key).add(strs[i]);
            }else{
                List<String> tmp=new ArrayList<>(); //新的列表
                tmp.add(strs[i]);
                hash.put(key,tmp);
            }
        }

        return new ArrayList<List<String>> (hash.values());
    }

    public static void main(String[] args) {
        String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};

        groupAnagrams groupAnagrams = new groupAnagrams();
        List<List<String>> result = groupAnagrams.method(strs);

        // 打印结果
        System.out.println(result);
    }

}
